package com.example.vaultmysql.repository;

import com.example.vaultmysql.entity.DatabaseConfig;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * 数据库配置Repository
 * 
 * @author System
 * @version 1.0.0
 */
@Repository
public interface DatabaseConfigRepository extends JpaRepository<DatabaseConfig, String> {

    /**
     * 根据名称查找数据库配置
     */
    Optional<DatabaseConfig> findByName(String name);

    /**
     * 查找所有启用的数据库配置
     */
    List<DatabaseConfig> findByEnabledTrue();

    /**
     * 根据主机和端口查找数据库配置
     */
    List<DatabaseConfig> findByHostAndPort(String host, Integer port);

    /**
     * 根据Vault路径查找数据库配置
     */
    Optional<DatabaseConfig> findByVaultPath(String vaultPath);

    /**
     * 查找指定主机的所有数据库
     */
    @Query("SELECT d FROM DatabaseConfig d WHERE d.host = :host AND d.enabled = true")
    List<DatabaseConfig> findEnabledByHost(@Param("host") String host);

    /**
     * 统计启用的数据库数量
     */
    @Query("SELECT COUNT(d) FROM DatabaseConfig d WHERE d.enabled = true")
    Long countEnabledDatabases();

    /**
     * 根据名称模糊查询
     */
    @Query("SELECT d FROM DatabaseConfig d WHERE d.name LIKE %:keyword% AND d.enabled = true")
    List<DatabaseConfig> findByNameContaining(@Param("keyword") String keyword);

    /**
     * 检查名称是否存在（排除指定ID）
     */
    @Query("SELECT COUNT(d) > 0 FROM DatabaseConfig d WHERE d.name = :name AND d.id != :excludeId")
    boolean existsByNameAndIdNot(@Param("name") String name, @Param("excludeId") String excludeId);
}